package api

import (
	"fmt"
	"github.com/360EntSecGroup-Skylar/excelize/v2"
	"go-money/dao"
	"go-money/mysql"
	"os"
	"strconv"
	"time"

	"github.com/gin-gonic/gin"
)

func Addform(c *gin.Context) {
	var all dao.Stu
	err := c.ShouldBind(&all)
	fmt.Println(all)
	if err != nil {
		c.JSON(500, gin.H{
			"msg":  "获取信息失败",
			"code": 500,
		})
		return
	}
	err = mysql.Searchtime(all.Stu_id, all.Name)
	if err == nil {
		c.JSON(401, gin.H{
			"msg": "请勿重新提交",
		})
		return
	}
	err = mysql.Form(all.Identity, all.Stu_id, all.Name, all.School, all.College, all.Field)
	if err != nil {
		c.JSON(400, gin.H{
			"msg": "提交失败",
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "成功",
		"code": 20000,
	})
}

func Addcollege(c *gin.Context) {
	var all dao.Col
	err := c.ShouldBind(&all)
	if err != nil {
		c.JSON(500, gin.H{
			"msg":  "获取信息失败",
			"code": 500,
		})
		return
	}
	err = mysql.Addcollege(all.College)
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "增加信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "增加成功",
		"code": 20000,
	})
}

func Deletecollege(c *gin.Context) {
	var all dao.Col
	err := c.ShouldBind(&all)
	if err != nil {
		c.JSON(500, gin.H{
			"msg":  "获取信息失败",
			"code": 500,
		})
		return
	}
	err = mysql.Deletecollege(all.College)
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "删除信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "删除成功",
		"code": 20000,
	})
}

func Searchcollege(c *gin.Context) {
	var all []dao.Col
	all, err := mysql.Searchcollege()
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "查询信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "成功",
		"data": all,
		"code": 20000,
	})
}

func Searchc(c *gin.Context) {
	var all []dao.Col
	all, err := mysql.Searchc()
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "查询信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "成功",
		"data": all,
		"code": 20000,
	})
}

func Addfield(c *gin.Context) {
	var all dao.Field
	err := c.ShouldBind(&all)
	if err != nil {
		c.JSON(500, gin.H{
			"msg":  "获取信息失败",
			"code": 500,
		})
		return
	}
	err = mysql.Addfield(all.Field)
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "增加信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "增加成功",
		"code": 20000,
	})
}

func Deletefield(c *gin.Context) {
	var all dao.Field
	err := c.ShouldBind(&all)
	if err != nil {
		c.JSON(500, gin.H{
			"msg":  "获取信息失败",
			"code": 500,
		})
		return
	}
	err = mysql.Deletefield(all.Field)
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "删除信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "删除成功",
		"code": 20000,
	})
}

func Searchfield(c *gin.Context) {
	var all []dao.Field
	all, err := mysql.Searchfield()
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "查询信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "查询成功",
		"data": all,
		"code": 20000,
	})
}

func Searchf(c *gin.Context) {
	var all []dao.Field
	all, err := mysql.Searchf()
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "查询信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "成功",
		"data": all,
		"code": 20000,
	})
}

//func Formname(c *gin.Context) {
//	var all []dao.Stu
//	name := c.Query("name")
//	all, err := mysql.Formname(name)
//	if err != nil {
//		c.JSON(400, gin.H{
//			"msg":  "查询信息失败",
//			"code": 400,
//		})
//		return
//	}
//	c.JSON(200, gin.H{
//		"msg":  "查询成功",
//		"data": all,
//		"code": 20000,
//	})
//}

//func Formcollege(c *gin.Context) {
//	var all []dao.Stu
//	college := c.Query("college")
//	all, err := mysql.Formcollege(college)
//	if err != nil {
//		c.JSON(400, gin.H{
//			"msg":  "查询信息失败",
//			"code": 400,
//		})
//		return
//	}
//	c.JSON(200, gin.H{
//		"msg":  "查询成功",
//		"data": all,
//		"code": 20000,
//	})
//}

//func Formfield(c *gin.Context) {
//	var all []dao.Stu
//	field := c.Query("field")
//	all, err := mysql.Formfield(field)
//	if err != nil {
//		c.JSON(400, gin.H{
//			"msg":  "查询信息失败",
//			"code": 400,
//		})
//		return
//	}
//	c.JSON(200, gin.H{
//		"msg":  "查询成功",
//		"data": all,
//		"code": 20000,
//	})
//}

func Allform(c *gin.Context) {
	all, err := mysql.Allform()
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "查询信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "查询成功",
		"data": all,
		"code": 20000,
	})
}

func SearchTime(c *gin.Context) {
	time1 := c.Query("time1")
	time2 := c.Query("time2")
	var all []dao.Stu
	all, err := mysql.SearchTime(time1, time2)
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "获取信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "获取信息成功",
		"data": all,
		"code": 20000,
	})
}

//func SearchIdentity(c *gin.Context) {
//	iden := c.Query("identity")
//	identity, _ := strconv.Atoi(iden)
//	all, err := mysql.Searchidentity(identity)
//	if err != nil {
//		c.JSON(400, gin.H{
//			"msg":  "查询信息出错",
//			"code": 400,
//		})
//		return
//	}
//	c.JSON(200, gin.H{
//		"msg":  "获取信息成功",
//		"data": all,
//		"code": 20000,
//	})
//}

func Field(c *gin.Context) {
	field := c.Query("field")
	timeStr := time.Now().Format("2006-01-02 15:04:05")
	getTime := time.Now().AddDate(-2, 0, 0).Format("2006-01-02 15:04:05")
	time1 := c.DefaultQuery("time1", getTime)
	time2 := c.DefaultQuery("time2", timeStr)
	fmt.Println(time2)
	if time2 == "" {
		time2 = timeStr
		time1 = getTime
	}

	all, err := mysql.Field(field, time1, time2)
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "查询信息出错",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "获取信息成功",
		"data": all,
		"code": 20000,
	})
}

func Download(c *gin.Context) {
	all, err := mysql.Allform()
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "获取所有信息失败",
			"code": 400,
		})
	}
	f := excelize.NewFile()
	// 创建一个工作表 同时设置单元格的值
	f.SetCellValue("Sheet1", "A1", "ID") // 设置单元格的值
	f.SetCellValue("Sheet1", "B1", "身份") // 设置单元格的值
	f.SetCellValue("Sheet1", "C1", "学号") // 设置单元格的值
	f.SetCellValue("Sheet1", "D1", "姓名") // 设置单元格的值
	f.SetCellValue("Sheet1", "E1", "学院") // 设置单元格的值
	f.SetCellValue("Sheet1", "F1", "场名") // 设置单元格的值
	f.SetCellValue("Sheet1", "G1", "时间") // 设置单元格的值

	for key, value := range all {
		var num string
		var flag string
		num = strconv.Itoa(key + 2)
		if value.Identity == 1 {
			flag = "本科生"
		} else if value.Identity == 2 {
			flag = "外校生"
		} else if value.Identity == 3{
			flag = "老师"
		} else {
			flag = "研究生"
		}
		f.SetCellValue("Sheet1", "A"+num, num)
		f.SetCellValue("Sheet1", "B"+num, flag)
		f.SetCellValue("Sheet1", "C"+num, value.Stu_id)
		f.SetCellValue("Sheet1", "D"+num, value.Name)
		f.SetCellValue("Sheet1", "E"+num, value.College)
		f.SetCellValue("Sheet1", "F"+num, value.Field)
		f.SetCellValue("Sheet1", "G"+num, value.Time)
	}
	if err := f.SaveAs("Workbook.xlsx"); err != nil {
		fmt.Println(err)
	}
	// var filename = "./Workbook.xlsx"
	// file, err := os.Create(filename)
	_, err = os.Open("Workbook.xlsx") //打开文件
	c.Header("Content-Type", "application/octet-stream")
	c.Header("Content-Disposition", "attachment; filename="+"Workbook.xlsx")
	c.Header("Content-Transfer-Encoding", "binary")
	//  c.Writer.Write(content)
	c.File("Workbook.xlsx")
	// //回写到web 流媒体 形成下载
	//  err = xlsx.Write(c.Writer)
	if err != nil {
		c.JSON(408, gin.H{
			"msg":  "请求时间超时,下载失败",
			"code": 408,
		})
		return
	}
}

//func Searchname(c *gin.Context) {
//	identity := c.Query("identity")
//	name := c.Query("name")
//	iden, _ := strconv.Atoi(identity)
//	all, err := mysql.Searchname(name, iden)
//	if err != nil {
//		c.JSON(400, gin.H{
//			"msg":  "获取信息失败",
//			"code": 400,
//		})
//		return
//	}
//	c.JSON(200, gin.H{
//		"msg":  "获取对应身分数据成功",
//		"data": all,
//		"code": 20000,
//	})
//}

func Searchall(c *gin.Context) {
	identity := c.Query("identity")
	//iden, _ := strconv.Atoi(identity)
	name := c.Query("name")
	college := c.Query("college")
	field := c.Query("field")
	timeStr := time.Now().Format("2006-01-02 15:04:05")
	getTime := time.Now().AddDate(-2, 0, 0).Format("2006-01-02 15:04:05")
	time1 := c.DefaultQuery("time1", getTime)
	time2 := c.DefaultQuery("time2", timeStr)
	all, err := mysql.Searchall(identity, name, college, field, time1, time2)
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "获取信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "获取信息成功",
		"data": all,
		"code": 20000,
	})
}

func Delete_time(c *gin.Context) {
	timeStr := time.Now().Format("2006-01-02 15:04:05")
	getTime := time.Now().AddDate(-2, 0, 0).Format("2006-01-02 15:04:05")
	time1 := c.DefaultQuery("time1", getTime)
	time2 := c.DefaultQuery("time2", timeStr)
	err := mysql.Delete_time(time1, time2)
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "删除失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "删除成功",
		"code": 20000,
	})
}

func Delete_f(c *gin.Context) {
	var all dao.Field
	err := c.ShouldBind(&all)
	if err != nil {
		c.JSON(500, gin.H{
			"msg":  "获取信息失败",
			"code": 500,
		})
		return
	}
	err = mysql.Delete_f(all.Field)
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "删除失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "增加成功",
		"code": 20000,
	})
}

func Delete_c(c *gin.Context) {
	var all dao.Col
	err := c.ShouldBind(&all)
	if err != nil {
		c.JSON(500, gin.H{
			"msg":  "获取信息失败",
			"code": 500,
		})
		return
	}
	err = mysql.Delete_c(all.College)
	if err != nil {
		c.JSON(400, gin.H{
			"msg":  "增加信息失败",
			"code": 400,
		})
		return
	}
	c.JSON(200, gin.H{
		"msg":  "增加成功",
		"code": 20000,
	})
}
